// Copyright (c) 2022 Presto Labs Pte. Ltd.
// Author: qiang

#pragma once

#include <memory>
#include <string>

#include "coin2/exchange/base/order/order.h"
#include "coin2/exchange/bitget_futures/api_order/native_private_client.h"
namespace coin2::exchange::bitget_futures::api_order {

class BitgetFuturesRestAsyncAsioSubscriber : public base::order::RestSubscriber {
 public:
  using RestSubscriber::RestSubscriber;
  using RestParams = coin2::exchange::order::BitgetFuturesRestParams;
  using RestClient = BitgetFuturesNativePrivateClient;

  void QueryPosition(const std::string& product_type);
  void QueryOpenOrders(const std::string& product_type);
  void QueryBalance(const std::string& product_type);
  void QueryAllOrders(const std::string& product_type);
  void QueryFillOrders(const std::string& product_type);

  void SubscribeAsync() override;

  std::set<std::string> GetProductTypeList();
  auto rest_client() { return dynamic_cast<RestClient*>(rest_client_); }

 private:
};

}  // namespace coin2::exchange::bitget_futures::api_order
